home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / test / test8.c < prev    next >
C/C++ Source or Header  |  1990-07-23  |  2KB  |  102 lines

  1. /* test 8 */
  2.  
  3. #include <sys/types.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/stat.h>
  7.  
  8. #define MAX_ERROR 4
  9.  
  10. extern int errno;
  11. int subtest, errct;
  12. extern off_t lseek();
  13.  
  14.  
  15. main()
  16. {
  17.   int i;
  18.  
  19.   printf("Test  8 ");
  20.   for (i = 0; i < 4; i++) {
  21.     test80();
  22.   }
  23.   printf("ok\n");
  24. }
  25.  
  26.  
  27.  
  28. test80()
  29. {
  30. /* Test mknod, chdir, chmod, chown, access.  */
  31.  
  32.   int i, j;
  33.   struct stat s;
  34.  
  35.   subtest = 0;
  36.   if (getuid() != 0) return;
  37.   for (j = 0; j < 2; j++) {
  38.     umask(0);
  39.  
  40.     if (chdir("/") < 0) e(1);
  41.     if (mknod("dir", 040700, 0) < 0) e(2);
  42.     if (link("/", "/dir/..") < 0) e(3);
  43.     if (mknod("T3a", 0777, 0) < 0) e(4);
  44.     if (mknod("/dir/T3b", 0777, 0) < 0) e(5);
  45.     if (mknod("dir/T3c", 0777, 0) < 0) e(6);
  46.     if ((i = open("/dir/T3b", 0)) < 0) e(7);
  47.     if (close(i) < 0) e(8);
  48.     if ((i = open("dir/T3c", O_RDONLY)) < 0) e(9);
  49.     if (close(i) < 0) e(10);
  50.     if (chdir("dir") < 0) e(11);
  51.     if ((i = open("T3b", 0)) < 0) e(12);
  52.     if (close(i) < 0) e(13);
  53.     if ((i = open("../T3a", O_RDONLY)) < 0) e(14);
  54.     if (close(i) < 0) e(15);
  55.     if ((i = open("../dir/../dir/../dir/../dir/../dir/T3c", O_RDONLY)) < 0)
  56.         e(16);
  57.     if (close(i) < 0) e(17);
  58.  
  59.     if (chmod("../dir/../dir/../dir/../dir/../T3a", 0123) < 0) e(18);
  60.     if (stat("../dir/../dir/../dir/../T3a", &s) < 0) e(19);
  61.     if ((s.st_mode & 077777) != 0123) e(20);
  62.     if (chmod("../dir/../dir/../T3a", 0456) < 0) e(21);
  63.     if (stat("../T3a", &s) < 0) e(22);
  64.     if ((s.st_mode & 077777) != 0456) e(23);
  65.     if (chown("../dir/../dir/../T3a", 20, 30) < 0) e(24);
  66.     if (stat("../T3a", &s) < 0) e(25);
  67.     if (s.st_uid != 20) e(26);
  68.     if (s.st_gid != 30) e(27);
  69.  
  70.     if ((i = open("/T3c", O_RDONLY)) >= 0) e(28);
  71.     if ((i = open("/T3a", O_RDONLY)) < 0) e(29);
  72.     if (close(i) < 0) e(30);
  73.  
  74.     if (access("/T3a", 4) < 0) e(31);
  75.     if (access("/dir/T3b", 4) < 0) e(32);
  76.     if (access("/dir/T3d", 4) >= 0) e(33);
  77.  
  78.     if (unlink("T3b") < 0) e(34);
  79.     if (unlink("T3c") < 0) e(35);
  80.     if (unlink("..") < 0) e(36);
  81.     if (chdir("/") < 0) e(37);
  82.     if (unlink("dir") < 0) e(38);
  83.     if (unlink("/T3a") < 0) e(39);
  84.   }
  85.  
  86. }
  87.  
  88.  
  89. e(n)
  90. int n;
  91. {
  92.   int err_num = errno;        /* save errno in case printf clobbers it */
  93.  
  94.   printf("Subtest %d,  error %d  errno=%d  ", subtest, n, errno);
  95.   errno = err_num;        /* restore errno, just in case */
  96.   perror("");
  97.   if (errct++ > MAX_ERROR) {
  98.     printf("Too many errors; test aborted\n");
  99.     exit(1);
  100.   }
  101. }
  102.